{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# PMBus on the ZCU104\n",
    "\n",
    "The ZCU104 has some support for monitoring power rails on the board using PMBus. PYNQ exposes these rails through the get_rails function that returns a dictionary of all of the rails available to be monitored."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/javascript": [
       "\n",
       "require(['notebook/js/codecell'], function(codecell) {\n",
       "  codecell.CodeCell.options_default.highlight_modes[\n",
       "      'magic_text/x-csrc'] = {'reg':[/^%%microblaze/]};\n",
       "  Jupyter.notebook.events.one('kernel_ready.Kernel', function(){\n",
       "      Jupyter.notebook.get_cells().map(function(cell){\n",
       "          if (cell.cell_type == 'code'){ cell.auto_highlight(); } }) ;\n",
       "  });\n",
       "});\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "{'12V': Rail {name=12V, voltage=Sensor {name=12V_voltage, value=12.113V}, current=Sensor {name=12V_current, value=1.159A}, power=Sensor {name=12V_power, value=14.05W}},\n",
       " '1V13': Rail {name=1V13, voltage=Sensor {name=1V13_voltage, value=1.125V}, current=Sensor {name=1V13_current, value=0.218A}, power=Sensor {name=1V13_power, value=0.21875W}},\n",
       " '1V2': Rail {name=1V2, voltage=Sensor {name=1V2_voltage, value=1.203V}, current=Sensor {name=1V2_current, value=0.234A}, power=Sensor {name=1V2_power, value=0.28125W}},\n",
       " '1V8': Rail {name=1V8, voltage=Sensor {name=1V8_voltage, value=1.804V}, current=Sensor {name=1V8_current, value=0.328A}, power=Sensor {name=1V8_power, value=0.5625W}},\n",
       " '3V3': Rail {name=3V3, voltage=Sensor {name=3V3_voltage, value=3.304V}, current=Sensor {name=3V3_current, value=0.625A}, power=Sensor {name=3V3_power, value=2.0W}},\n",
       " '5V0': Rail {name=5V0, voltage=Sensor {name=5V0_voltage, value=5.0V}, current=Sensor {name=5V0_current, value=0.0A}, power=Sensor {name=5V0_power, value=0.0W}},\n",
       " 'FMC': Rail {name=FMC, voltage=Sensor {name=FMC_voltage, value=0.156V}, current=Sensor {name=FMC_current, value=10.187A}, power=Sensor {name=FMC_power, value=0.03125W}},\n",
       " 'INT': Rail {name=INT, voltage=Sensor {name=INT_voltage, value=0.851V}, current=Sensor {name=INT_current, value=4.375A}, power=Sensor {name=INT_power, value=3.5W}},\n",
       " 'MGTA': Rail {name=MGTA, voltage=Sensor {name=MGTA_voltage, value=0.898V}, current=Sensor {name=MGTA_current, value=0.128A}, power=Sensor {name=MGTA_power, value=0.109375W}},\n",
       " 'MGTRA': Rail {name=MGTRA, voltage=Sensor {name=MGTRA_voltage, value=0.835V}, current=Sensor {name=MGTRA_current, value=0.039A}, power=Sensor {name=MGTRA_power, value=0.03125W}}}"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import pynq\n",
    "\n",
    "rails = pynq.get_rails()\n",
    "rails"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "As can be seen, the keys of the dictionary are the names of the voltage rails while the values are `Rail` objects which contain three sensors for the voltage, current and power. Due to limitations of the regulators used on the ZCU104 the resolution of most of the power railes are only to 1/8 W.\n",
    "\n",
    "To see how power changes under CPU load we can use the `DataRecorder` class. For this example we are going to look at total board power as we load one of the CPU cores in Python."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "recorder = pynq.DataRecorder(rails['12V'].power)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can now use the recorder to monitor the applied sensor. For this example we'll sample the power every half second while sleeping and performing a dummy loop"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "import time\n",
    "with recorder.record(0.5):\n",
    "    time.sleep(10)\n",
    "    for _ in range(10000000):\n",
    "        pass\n",
    "    time.sleep(10)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The `DataRecorder` exposes the sensor data as a pandas dataframe"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Invocation</th>\n",
       "      <th>12V_power</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2018-06-12 14:10:14.590922</th>\n",
       "      <td>0</td>\n",
       "      <td>14.300</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-06-12 14:10:15.091951</th>\n",
       "      <td>0</td>\n",
       "      <td>13.825</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-06-12 14:10:15.592879</th>\n",
       "      <td>0</td>\n",
       "      <td>13.825</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-06-12 14:10:16.093752</th>\n",
       "      <td>0</td>\n",
       "      <td>13.825</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-06-12 14:10:16.594644</th>\n",
       "      <td>0</td>\n",
       "      <td>13.800</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-06-12 14:10:17.095583</th>\n",
       "      <td>0</td>\n",
       "      <td>13.825</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-06-12 14:10:17.596424</th>\n",
       "      <td>0</td>\n",
       "      <td>13.825</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-06-12 14:10:18.097266</th>\n",
       "      <td>0</td>\n",
       "      <td>13.825</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-06-12 14:10:18.598133</th>\n",
       "      <td>0</td>\n",
       "      <td>13.800</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-06-12 14:10:19.098978</th>\n",
       "      <td>0</td>\n",
       "      <td>13.800</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-06-12 14:10:19.599862</th>\n",
       "      <td>0</td>\n",
       "      <td>13.825</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-06-12 14:10:20.100796</th>\n",
       "      <td>0</td>\n",
       "      <td>13.825</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-06-12 14:10:20.601771</th>\n",
       "      <td>0</td>\n",
       "      <td>13.800</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-06-12 14:10:21.102624</th>\n",
       "      <td>0</td>\n",
       "      <td>13.800</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-06-12 14:10:21.603606</th>\n",
       "      <td>0</td>\n",
       "      <td>13.825</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-06-12 14:10:22.104582</th>\n",
       "      <td>0</td>\n",
       "      <td>13.825</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-06-12 14:10:22.605515</th>\n",
       "      <td>0</td>\n",
       "      <td>13.825</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-06-12 14:10:23.106495</th>\n",
       "      <td>0</td>\n",
       "      <td>13.800</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-06-12 14:10:23.607339</th>\n",
       "      <td>0</td>\n",
       "      <td>13.800</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-06-12 14:10:24.108314</th>\n",
       "      <td>0</td>\n",
       "      <td>13.825</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-06-12 14:10:24.614368</th>\n",
       "      <td>0</td>\n",
       "      <td>13.875</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-06-12 14:10:25.125480</th>\n",
       "      <td>0</td>\n",
       "      <td>13.800</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-06-12 14:10:25.636581</th>\n",
       "      <td>0</td>\n",
       "      <td>13.975</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-06-12 14:10:26.147517</th>\n",
       "      <td>0</td>\n",
       "      <td>14.000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-06-12 14:10:26.658481</th>\n",
       "      <td>0</td>\n",
       "      <td>14.025</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-06-12 14:10:27.169514</th>\n",
       "      <td>0</td>\n",
       "      <td>14.000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-06-12 14:10:27.680505</th>\n",
       "      <td>0</td>\n",
       "      <td>14.000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-06-12 14:10:28.186375</th>\n",
       "      <td>0</td>\n",
       "      <td>13.800</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-06-12 14:10:28.687186</th>\n",
       "      <td>0</td>\n",
       "      <td>13.800</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-06-12 14:10:29.188076</th>\n",
       "      <td>0</td>\n",
       "      <td>13.800</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-06-12 14:10:29.689050</th>\n",
       "      <td>0</td>\n",
       "      <td>13.825</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-06-12 14:10:30.189987</th>\n",
       "      <td>0</td>\n",
       "      <td>13.800</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-06-12 14:10:30.690962</th>\n",
       "      <td>0</td>\n",
       "      <td>13.800</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-06-12 14:10:31.191853</th>\n",
       "      <td>0</td>\n",
       "      <td>13.800</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-06-12 14:10:31.692828</th>\n",
       "      <td>0</td>\n",
       "      <td>13.825</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-06-12 14:10:32.193813</th>\n",
       "      <td>0</td>\n",
       "      <td>13.825</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-06-12 14:10:32.694828</th>\n",
       "      <td>0</td>\n",
       "      <td>13.825</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-06-12 14:10:33.195804</th>\n",
       "      <td>0</td>\n",
       "      <td>13.800</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-06-12 14:10:33.696651</th>\n",
       "      <td>0</td>\n",
       "      <td>13.825</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-06-12 14:10:34.197641</th>\n",
       "      <td>0</td>\n",
       "      <td>13.825</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-06-12 14:10:34.698540</th>\n",
       "      <td>0</td>\n",
       "      <td>13.825</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-06-12 14:10:35.199527</th>\n",
       "      <td>0</td>\n",
       "      <td>13.825</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-06-12 14:10:35.700457</th>\n",
       "      <td>0</td>\n",
       "      <td>13.825</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-06-12 14:10:36.201440</th>\n",
       "      <td>0</td>\n",
       "      <td>13.825</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-06-12 14:10:36.702443</th>\n",
       "      <td>0</td>\n",
       "      <td>13.800</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-06-12 14:10:37.203427</th>\n",
       "      <td>0</td>\n",
       "      <td>13.800</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-06-12 14:10:37.704407</th>\n",
       "      <td>0</td>\n",
       "      <td>13.800</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                            Invocation  12V_power\n",
       "2018-06-12 14:10:14.590922           0     14.300\n",
       "2018-06-12 14:10:15.091951           0     13.825\n",
       "2018-06-12 14:10:15.592879           0     13.825\n",
       "2018-06-12 14:10:16.093752           0     13.825\n",
       "2018-06-12 14:10:16.594644           0     13.800\n",
       "2018-06-12 14:10:17.095583           0     13.825\n",
       "2018-06-12 14:10:17.596424           0     13.825\n",
       "2018-06-12 14:10:18.097266           0     13.825\n",
       "2018-06-12 14:10:18.598133           0     13.800\n",
       "2018-06-12 14:10:19.098978           0     13.800\n",
       "2018-06-12 14:10:19.599862           0     13.825\n",
       "2018-06-12 14:10:20.100796           0     13.825\n",
       "2018-06-12 14:10:20.601771           0     13.800\n",
       "2018-06-12 14:10:21.102624           0     13.800\n",
       "2018-06-12 14:10:21.603606           0     13.825\n",
       "2018-06-12 14:10:22.104582           0     13.825\n",
       "2018-06-12 14:10:22.605515           0     13.825\n",
       "2018-06-12 14:10:23.106495           0     13.800\n",
       "2018-06-12 14:10:23.607339           0     13.800\n",
       "2018-06-12 14:10:24.108314           0     13.825\n",
       "2018-06-12 14:10:24.614368           0     13.875\n",
       "2018-06-12 14:10:25.125480           0     13.800\n",
       "2018-06-12 14:10:25.636581           0     13.975\n",
       "2018-06-12 14:10:26.147517           0     14.000\n",
       "2018-06-12 14:10:26.658481           0     14.025\n",
       "2018-06-12 14:10:27.169514           0     14.000\n",
       "2018-06-12 14:10:27.680505           0     14.000\n",
       "2018-06-12 14:10:28.186375           0     13.800\n",
       "2018-06-12 14:10:28.687186           0     13.800\n",
       "2018-06-12 14:10:29.188076           0     13.800\n",
       "2018-06-12 14:10:29.689050           0     13.825\n",
       "2018-06-12 14:10:30.189987           0     13.800\n",
       "2018-06-12 14:10:30.690962           0     13.800\n",
       "2018-06-12 14:10:31.191853           0     13.800\n",
       "2018-06-12 14:10:31.692828           0     13.825\n",
       "2018-06-12 14:10:32.193813           0     13.825\n",
       "2018-06-12 14:10:32.694828           0     13.825\n",
       "2018-06-12 14:10:33.195804           0     13.800\n",
       "2018-06-12 14:10:33.696651           0     13.825\n",
       "2018-06-12 14:10:34.197641           0     13.825\n",
       "2018-06-12 14:10:34.698540           0     13.825\n",
       "2018-06-12 14:10:35.199527           0     13.825\n",
       "2018-06-12 14:10:35.700457           0     13.825\n",
       "2018-06-12 14:10:36.201440           0     13.825\n",
       "2018-06-12 14:10:36.702443           0     13.800\n",
       "2018-06-12 14:10:37.203427           0     13.800\n",
       "2018-06-12 14:10:37.704407           0     13.800"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "recorder.frame"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "or by plotting the results using matplotlib"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x7f71ed0240>"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f71eb3b00>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "%matplotlib inline\n",
    "recorder.frame['12V_power'].plot()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can get more information by using the `mark` function which will increment the invocation number without having to stop and start the recorder"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([<matplotlib.axes._subplots.AxesSubplot object at 0x7f728c9f60>,\n",
       "       <matplotlib.axes._subplots.AxesSubplot object at 0x7f71de17f0>], dtype=object)"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f71e5e4e0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "recorder.reset()\n",
    "with recorder.record(0.5):\n",
    "    time.sleep(10)\n",
    "    recorder.mark()\n",
    "    for _ in range(10000000):\n",
    "        pass\n",
    "    recorder.mark()\n",
    "    time.sleep(10)\n",
    "    \n",
    "recorder.frame.plot(subplots=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This clearly shows the power spike when the for loop starts running."
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
